package Top101K;

/**
 * @Author quan
 * @Description 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址
 * @Date 2023/10/26 10:53
 */
public class BM85_IP {
    public static void main(String[] args) {
        String IP = "1a1.0.1.";
        String res = solve(IP);
//        System.out.println(res);
    }
     /* 验证IP地址
     * @param IP string字符串 一个IP地址字符串
     * @return string字符串
     */
     public static String solve (String IP) {
         //1-按照.分割，判断组数是不是符合要求
         String str = IP;
         if (str.contains(".")) {
             String[] arr = str.split("\\.",-1);
             if (arr.length > 4) {
                 return "Neither";
             } else {
                 boolean isDigit =
                         false;//定义一个boolean值，用来表示是否包含数字
                 boolean isLetter =
                         false;//定义一个boolean值，用来表示是否包含字母
                 //2-判断每组的元素个数是不是符合要求
                 for (String str1 : arr) {
                     if (str1.length() > 4 || str1.length()==0) {
                         return "Neither";
                     }
                     if (str1.charAt(0) == '0') {
                         return "Neither";
                     }

                     for (int i = 0; i < str1.length(); i++) {
                         if (Character.isDigit(str.charAt(i))) {
                             isDigit = true;
                         }
                         if (Character.isLetter(str.charAt(
                                 i))) { //用char包装类中的判断字母的方法判断每一个字符
                             isLetter = true;
                         }
                         if (isDigit == true && isLetter == true) {
                             return "Neither";
                         }
                     }
                     //判断每一组十进制数是不是合法的范围0-255
                     //字符串转为数字 Integer.parseInt(str)
                     if (Integer.parseInt(str1) > 255 || Integer.parseInt(str1) < 0) {
                         return "Neither";
                     }
                 }
                 return "IPv4";
             }
         } else if (str.contains(":")) {
             String[] arr = str.split(":",-1);
             if (arr.length != 8) {
                 return "Neither";
             }
             for (String str1 : arr) {
                 if (str1.length() > 4 || str1.length()==0) {
                     return "Neither";
                 }
             }
             for (int i = 0; i < arr.length; i++) {
                 String str1 = arr[i];
                 for (int j = 0; j < str1.length(); j++) {
                     char c = str1.charAt(j);
                     if (!(( c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))) {
                         return "Neither";
                     }
                 }
             }
             return "IPv6";
         }
         return "Neither";
     }
}
